using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using EnhancedUI.EnhancedScroller;
namespace EnhancedScrollerDemos.JumpToDemo
{
///
/// This demo shows how to jump to an index in the scroller. You can jump to a position before
/// or after the cell. You can also include the spacing before or after the cell.
///
public class Controller : MonoBehaviour, IEnhancedScrollerDelegate
{
///
/// In this example we are going to use a standard generic List. We could have used
/// a SmallList for efficiency, but this is just a demonstration that other list
/// types can be used.
///
private List _data;
///
/// Reference to the scrollers
///
public EnhancedScroller vScroller;
public EnhancedScroller hScroller;
///
/// References to the UI elements
///
public InputField jumpIndexInput;
public Toggle useSpacingToggle;
public Slider scrollerOffsetSlider;
public Slider cellOffsetSlider;
///
/// Reference to the cell prefab
///
public EnhancedScrollerCellView cellViewPrefab;
public EnhancedScroller.TweenType vScrollerTweenType = EnhancedScroller.TweenType.immediate;
public float vScrollerTweenTime = 0f;
public EnhancedScroller.TweenType hScrollerTweenType = EnhancedScroller.TweenType.immediate;
public float hScrollerTweenTime = 0f;
void Start()
{
// set up the scroller delegates
vScroller.Delegate = this;
hScroller.Delegate = this;
// set up some simple data
_data = new List();
for (var i = 0; i < 1000; i++)
_data.Add(new Data() { cellText = "Cell Data Index " + i.ToString() });
// tell the scroller to reload now that we have the data
vScroller.ReloadData();
hScroller.ReloadData();
}
#region UI Handlers
public void JumpButton_OnClick()
{
int jumpDataIndex;
// extract the integer from the input text
if (int.TryParse(jumpIndexInput.text, out jumpDataIndex))
{
// jump to the index
vScroller.JumpToDataIndex(jumpDataIndex, scrollerOffsetSlider.value, cellOffsetSlider.value, useSpacingToggle.isOn, vScrollerTweenType, vScrollerTweenTime);
hScroller.JumpToDataIndex(jumpDataIndex, scrollerOffsetSlider.value, cellOffsetSlider.value, useSpacingToggle.isOn, hScrollerTweenType, hScrollerTweenTime);
}
else
{
Debug.LogWarning("The jump value you entered is not a number.");
}
}
#endregion
#region EnhancedScroller Handlers
///
/// This tells the scroller the number of cells that should have room allocated. This should be the length of your data array.
///
/// The scroller that is requesting the data size
/// The number of cells
public int GetNumberOfCells(EnhancedScroller scroller)
{
// in this example, we just pass the number of our data elements
return _data.Count;
}
///
/// This tells the scroller what the size of a given cell will be. Cells can be any size and do not have
/// to be uniform. For vertical scrollers the cell size will be the height. For horizontal scrollers the
/// cell size will be the width.
///
/// The scroller requesting the cell size
/// The index of the data that the scroller is requesting
/// The size of the cell
public float GetCellViewSize(EnhancedScroller scroller, int dataIndex)
{
// in this example, even numbered cells are 30 pixels tall, odd numbered cells are 100 pixels tall for the vertical scroller
// the horizontal scroller has a fixed cell size of 200 pixels
if (scroller == vScroller)
return (dataIndex % 2 == 0 ? 30f : 100f);
else
return (200f);
}
///
/// Gets the cell to be displayed. You can have numerous cell types, allowing variety in your list.
/// Some examples of this would be headers, footers, and other grouping cells.
///
/// The scroller requesting the cell
/// The index of the data that the scroller is requesting
/// The index of the list. This will likely be different from the dataIndex if the scroller is looping
/// The cell for the scroller to use
public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex)
{
// first, we get a cell from the scroller by passing a prefab.
// if the scroller finds one it can recycle it will do so, otherwise
// it will create a new cell.
CellView cellView = scroller.GetCellView(cellViewPrefab) as CellView;
// set the name of the game object to the cell's data index.
// this is optional, but it helps up debug the objects in
// the scene hierarchy.
cellView.name = "Cell " + dataIndex.ToString();
// in this example, we just pass the data to our cell's view which will update its UI
cellView.SetData(_data[dataIndex]);
// return the cell to the scroller
return cellView;
}
#endregion
}
}